#include <iostream>
using namespace std;

const int N = 1e6 + 10;

int heap[N],n;

void up(int chi){
	int par = chi / 2;
	while(par >= 1&&heap[par] > heap[chi]){
		swap(heap[par],heap[chi]);
		chi = par;
		par = chi / 2;
	}
}

void down(int par){
	int chi = par * 2;
	
	
	while(chi <= n){
		if(chi + 1 <= n && heap[chi + 1] < heap[chi]) chi++;
		if(heap[chi] >= heap[par]) return ;
		swap(heap[chi],heap[par]);
		par = chi;
		chi = par * 2;
	}
}

void push(int x){
	heap[++n] = x;
	up(n);
}

void pop(){
	swap(heap[1],heap[n--]);
	down(1);
}

int front(){
	return heap[1];
} 

int main(){
	int t;
	cin >> t;
	while(t--){
		int op;
		cin >> op;
		switch(op){
			case 1:int x;cin >> x;push(x);break;
			case 2:cout << front() << endl;break;
			case 3:pop();break;
		}
	}
	return 0;
}
